#ifndef __MODULE_MANAGER_H__
#define __MODULE_MANAGER_H__

#include <map>
#include <string>

class ModuleInterface;

/**
 *	Ma za ulohu spravu modulov. Pomocou metody registerModule registruje novy modul,
 *	getModule vracia modul.
 *	Zaistuje ich korektne zmazanie pri ukonceni programu.
 *  Singleton, jedna instancia v programe, pouziva sa pomocou ModuleManager::getInstance()
 */
class ModuleManager
{
public:
	static ModuleManager& GetInstance(); 
	ModuleInterface* GetModule(std::string moduleClassName);
	bool RegisterModule(std::string moduleClassName, ModuleInterface* moduleToRegister);

private:
	ModuleManager();
	~ModuleManager();
	ModuleManager(const ModuleManager& m);
	ModuleManager& operator = (const ModuleManager& s);

	std::map<std::string, ModuleInterface* > loadedModules; //obsahuje zaregistrovane moduly hraca

};

#endif
